
const request = require('./request');
console.log('获取到的url是：',request.baseUrl);


//美景相关接口
const sceneryApi = {
    //分页查询美景
    getSceneryList: (pageNum = 1, pageSize = 9) => {
        return request.get('/user/scenes/page', {
            pageNum: pageNum,
            pageSize: pageSize
        });
    },
    //根据id查询景点
    getSceneryDetail: (id) => {
        return request.get(`/user/scenes/${id}`);
    },
};

// 美食相关接口
const foodApi = {
  //分页查询美食
  getFoodList: (pageNum = 1, pageSize = 10) => {
    return request.get('/user/foods/page', {
        pageNum: pageNum,
        pageSize: pageSize
    });
  },
  //根据id查询美食
  getFoodDetail: (id) => {
    return request.get(`/user/foods/${id}`);
  },
};

//活动相关接口
const activityApi = {
    //根据分类查询活动
    getActivityList: (theme = 0) => {
        return request.get('/user/activities', {
            theme: theme
        });
    },
    //根据id查询活动
    getActivityDetail: (id) => {
        return request.get(`/user/activities/${id}`)
    },
};

//住宿相关接口
const livesApi = {
    //根据分类查询住宿
    getLIvesLIstApi: (pageNum = 1, pageSize = 10) => {
        return request.get('/user/lives/page', {
            page: pageNum,
            size: pageSize
        })
    },
    //根据id查询住宿
    getLivesDetail: (id) => {
        return request.get(`/user/lives/${id}`)
    },
};

//路线相关接口
const routeApi = {
    //条件查询路线&景点
    getRouteListApi: (category,params={}) => {
        return request.get('/user/routes/list',{
            category: category,
            ...params
        });
    },
};

//音频相关接口
const audiosApi = {
    //分页查询声音
    getAudiosListApi: (pageNum = 1, pageSize = 10, params={}) => {
        return request.get('/user/audios/page',{
            pageNum:pageNum,
            pageSize:pageSize,
            ...params
        });
    },
    //根据id查询声音
    getAudiosDetail:(id) => {
        return request.get(`/user/audios/${id}`)
    }
};

//故事收藏查询
const storyApi = {
    //分页查询故事
    getStoryList: (pageNum = 1, pageSize=9, params={}) => {
        return request.get('/user/stories/page',{
            pageNum: pageNum,
            pageSize: pageSize,
            ...params
        });
    },
    //根据id查询故事
    searchStoryListApi: (id) => {
        return request.get(`/user/stories/${id}`);
    },
};

//社区相关接口
const communityApi = {
    //根据ID查询分享详情
    getShareDetail: (id) => {
        console.log(`查询分享ID ${id} 的详情`);
        return request.get(`/user/community/shares/detail/${id}`);
    },
    //查询热门分享
    getHotShares: () => {
        return request.get('/user/community/shares/hots');
    },
    //分页查询分享
    getSharesByPage: (pageNum = 1, pageSize = 10, params = {}) => {
        return request.get('/user/community/shares/page', {
            pageNum: pageNum,
            pageSize: pageSize,
            ...params
        });
    },
    //根据用户id查询分享
    getUserShares: (userId) => {
        console.log('获取用户分享列表，传入的userId:', userId);
        if (!userId) {
            // 当没有传入userId时，使用本地存储的用户ID（适用于我的分享页面）
            const userInfo = wx.getStorageSync('userInfo');
            userId = userInfo?.id || userInfo?.userId || null;
            console.log('未传入userId，使用本地存储的用户ID:', userId);
        }
        
        if (!userId) {
            console.error('无法获取有效的用户ID');
            return Promise.reject('用户ID无效');
        }
        
        console.log('最终使用的userId:', userId);
        // 使用正确的API路径格式：/user/community/shares/user/{id}
        return request.get('/user/community/shares/user/' + userId);
    },
    // 查询用户分享列表（注意：此方法已被getUserShares替代，请使用getUserShares获取特定用户的分享历史）
    // 如需分页查询分享，请使用getSharesByPage方法
    getShares: (params) => {
        console.warn('getShares方法已被getUserShares替代，请使用getUserShares获取特定用户的分享历史');
        return request.get('/user/community/shares', params);
    },
    //提交分享
    submitShare: async (data) => {
        console.log('提交分享数据:', data);
        
        // 根据接口文档要求，确保数据格式正确
        // 构建符合接口要求的请求体
        const requestBody = {
            title: data.title || '', // 标题为必填项
            description: data.description || null, // 描述为必填项，可为null
            postUrl: data.postUrl || null, // 文章url为可选项，可为null
            imageUrls: data.imageUrls || null // 图片URL列表为可选项，可为null
        };
        
        console.log('构建的请求体:', requestBody);
        
        // 发送POST请求，确保Content-Type为application/json
        // 直接使用request.post方法，它会自动设置正确的Content-Type头
        try {
            const response = await request.post('/user/community/shares', requestBody);
            console.log('提交分享响应:', response);
            return response;
        } catch (error) {
            console.error('提交分享失败:', error);
            // 重新抛出错误以便调用方处理
            throw error;
        }
    },
    //发布分享（复用submitShare方法，避免代码重复）
    publishShare: (data) => {
        console.log('发布分享数据:', data);
        // 直接调用submitShare方法，复用相同的逻辑
        return communityApi.submitShare(data);
    },
    //修改分享
    updateShare: (data) => {
        console.log('修改分享数据:', data);
        
        // 检查id是否存在且有效
        if (!data.id && data.id !== 0) {
            console.error('修改失败：分享ID无效');
            return Promise.reject('分享ID无效');
        }
        
        // 格式化数据，确保符合接口文档要求
        // 使用正确的字段名：title、description、postUrl和imageUrls
        const formattedData = {
            id: parseInt(data.id), // 确保id为整数类型
            // 只包含接口文档中定义的可选字段
            title: data.title !== undefined ? data.title : undefined,
            description: data.description !== undefined ? data.description : undefined,
            postUrl: data.postUrl !== undefined ? data.postUrl : undefined,
            imageUrls: data.imageUrls !== undefined ? data.imageUrls : undefined
        };
        
        // 移除未定义的字段
        Object.keys(formattedData).forEach(key => {
            if (formattedData[key] === undefined) {
                delete formattedData[key];
            }
        });
        
        return request.put('/user/community/shares', formattedData);
    },
    //删除分享
    deleteShare: (shareId) => {
        console.log('删除分享，分享ID:', shareId);
        
        // 确保分享ID有效
        if (!shareId || (typeof shareId !== 'string' && typeof shareId !== 'number')) {
            console.error('删除失败：分享ID无效');
            return Promise.reject('分享ID无效');
        }
        
        // 不进行类型转换，保持原始ID格式
        const id = shareId;
        
        // 将分享ID作为URL路径参数传递，而不是查询参数
        return new Promise((resolve, reject) => {
            wx.showLoading({
                title: '加载中...',
                mask: true
            });
            
            const token = wx.getStorageSync('token');
            const header = {};
            if (token) {
                header['Authorization'] = `${token}`;
            }
            
            wx.request({
                url: request.baseUrl + `/user/community/shares/${id}`,
                method: 'DELETE',
                header: header,
                // 不传递data参数，避免任何可能的格式问题
                success: (res) => {
                    wx.hideLoading();
                    
                    if(res.statusCode === 200) {
                        if(res.data.code === 200){
                            resolve(res.data.data);
                        }else{
                            wx.showToast({
                                title: res.data.msg || '请求失败',
                                icon: 'none'
                            });
                            reject(res.data);
                        }
                    }else if(res.statusCode === 401){
                        wx.removeStorageSync('token');
                        wx.navigateTo({
                            url: '/pages/home/home',
                        });
                        reject(new Error('登录过期,请重新登录'));
                        return;
                    }else{
                        wx.showToast({
                            title: `网络错误${res.statusCode}`,
                        });
                        reject(res);
                    }
                },
                fail: (err) => {
                    wx.hideLoading();
                    wx.showToast({
                        title: '网络请求失败',
                    });
                    reject(err);
                }
            });
        });
    },
    // 查询用户列表（通过查询分享详情接口获取用户信息）
    getUserList: (startId = 1, endId = 10) => {
        console.log(`开始查询用户列表，ID范围：${startId}-${endId}`);
        const promises = [];
        
        // 循环调用getShareDetail接口查询不同ID的分享
        for (let i = startId; i <= endId; i++) {
            promises.push(
                communityApi.getShareDetail(i)
                    .then(res => {
                        // 从分享详情中提取用户信息
                        if (res && res.data) {
                            return {
                                userId: res.data.createUser,
                                shareId: res.data.id,
                                title: res.data.title,
                                createTime: res.data.createTime,
                                status: res.data.status
                            };
                        }
                        return null;
                    })
                    .catch(err => {
                        console.log(`查询ID为${i}的分享失败，可能不存在该分享：`, err);
                        return null;
                    })
            );
        }
        
        // 等待所有请求完成，并过滤掉null值
        return Promise.all(promises).then(results => {
            // 过滤掉null值和重复的用户
            const uniqueUsers = {};
            const validResults = results.filter(item => item !== null);
            
            validResults.forEach(item => {
                if (item.userId && !uniqueUsers[item.userId]) {
                    uniqueUsers[item.userId] = item;
                }
            });
            
            console.log(`用户列表查询完成，共获取到${Object.keys(uniqueUsers).length}个用户`);
            return Object.values(uniqueUsers);
        });
    }
};

//评论相关接口
const commentApi = {
    //根据目标id添加评论
    addComment: (params) => {
        const token = wx.getStorageSync('token');  
        if (!token) {
            // 提示并跳转  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.post('/user/comments', {
            targetType: params.targetType,
            targetId: params.targetId,
            content: params.content
        });
    },
    //根据id删除评论
    deleteComment: (id) => {
        const token = wx.getStorageSync('token');  
        console.log(token);
        if (!token) {  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.delete('/user/comments',{
            id: id
        });
    },
    //分页查询评论
    getCommentList: (pageNum = 1, pageSize = 9, params={}) => {
        return request.get('/user/comments/page',{
            pageNum: pageNum,
            pageSize: pageSize,
            ...params
        });
    },
};

//点赞相关接口
const likeApi = {
    //根据资源id修改点赞状态
    changeLike:(id, isLike, targetType) => {
        return request.put(`/user/likes/${id}`,{
            isLike: isLike,
            targetType: targetType
        });
    },
    //根据用户id分页查询赞过的内容
    getUserLikes: (pageNum = 1, pageSize = 10, targetType) => {
        // 检查token
        const token = wx.getStorageSync('token');  
        if (!token) {
            // 提示并跳转  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.get('/user/likes', {
            pageNum: pageNum,
            pageSize: pageSize,
            targetType: targetType
        });

    }
};




//用户相关
const myApi = {
    //登录&创建账户
    login: (code) => {
        return request.post('/user/users/login',{
            code: code
        })
    },
    //根据id查询用户
    getUserInfo: (id) => {
        return request.get(`/user/users/${id}`)
    },
    //修改个人信息
    changeUserInfo: (params={}) => {
        const token = wx.getStorageSync('token');  
        if (!token) {  
            // 提示并跳转  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.put('/user/users/update',{
            ...params
        });
    },
};

//上传文件接口
const allUseApi = {
    // 上传文件方法（使用导入的 baseUrl）
    uploadFiles: (params) => {
      return new Promise((resolve, reject) => {
        if (!params.filePath || !params.fileType) {
          reject(new Error('缺少必填参数'));
          return;
        }

        wx.uploadFile({
          url: request.baseUrl + '/user/upload/file', // 拼接完整接口地址
          method: 'POST',
          filePath: params.filePath,
          name: 'file',
          header: {
            ...(params.token ? { 'Authorization': params.token } : {})
          },
          formData: {
            fileType: params.fileType // 根据接口文档要求，只需要fileType参数
          },
          success(res) {
            try {
              const result = JSON.parse(res.data);
              if (result.code === 200 && result.data) {
                resolve(result.data);
              } else {
                reject(new Error(result.msg || '上传失败'));
              }
            } catch (e) {
              reject(new Error('接口返回格式错误'));
            }
          },
          fail(err) {
            reject(new Error(`请求失败：${err.errMsg}`));
          }
        });
      });
    },
    
    // 图片上传专用方法
    uploadImage: (filePath, token) => {
      return allUseApi.uploadFiles({
        filePath: filePath,
        fileType: 'image', // 根据接口文档要求，图片文件类型为'image'
        token: token
      });
    }
  };

  //意见反馈接口
  const feedBackApi = {
    //提交用户反馈
    submitFeedBack:(content ,params={}) => {
        const token = wx.getStorageSync('token');  
        if (!token) {  
            // 提示并跳转  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.put('/user/feedbacks',{
            content: content,
            ...params
        });
    },
    //查询我的意见
    getFeedBack: (params={}) => {
        const token = wx.getStorageSync('token');  
        if (!token) {  
            // 提示并跳转  
            wx.showToast({ title: '请先登录', icon: 'none' });  
            wx.reLaunch({ url: '/pages/login/login' });  
            return Promise.reject('未登录');  
        };
        return request.get('/user/feedbacks',{
          
            ...params
        })
    }
  };


// 导出所有接口模块
module.exports = {
  scenery: sceneryApi,
  food: foodApi,
  activity: activityApi,
  lives: livesApi,
  route: routeApi,
  audios: audiosApi,
  story: storyApi,
  community: communityApi,
  comment: commentApi,
  my: myApi,
  allUse: allUseApi,
  feedBack: feedBackApi,
  like: likeApi
};
